package br.com.comanda.dao.helper;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import br.com.comanda.dao.autosql.ScriptGenerator;
import br.com.comanda.dao.helper.versionControl.DatabaseUpgrade;
import br.com.comanda.dao.helper.versionControl.VersionControl;
import br.com.comanda.util.Constantes;

/**
 * Classe para execução dos scripts de criacao da base de dados
 * 
 * @author thiago
 * @since 09/01/2013
 */
public class DataBaseRepositoryHelper extends SQLiteOpenHelper {

	public DataBaseRepositoryHelper(Context context, String dbName,
			int dbVersion) {
		super(context, dbName, null, dbVersion);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		ScriptGenerator generator = new ScriptGenerator();
		String[] scriptSQLCreate = generator.generateCreateScript();

		for (String script : scriptSQLCreate) {
			db.execSQL(script);
		}
	}

	/**
	 * NUNCA esquecer de alterar também a versão na classe Constantes. Sempre
	 * quando há alteração do banco de dados, devem ser alterados a versão e
	 * feito a alteração na classe VersionControl.
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		VersionControl svn = new VersionControl();

		Log.w(Constantes.TAG_LOG, String.format(
				"Atualizando versao do banco de dados de %d para %d",
				oldVersion, newVersion));

		if (svn.existsNewUpgrade(oldVersion)) {
			for (DatabaseUpgrade sqlCommand : svn.getUpgradesToExecute(
					oldVersion, newVersion)) {
				Log.d(Constantes.TAG_LOG,
						String.format("Alteração de %s: (%s)",
								sqlCommand.getDate(),
								sqlCommand.getSqlCommand()));
				db.execSQL(sqlCommand.getSqlCommand());
			}
		}
	}
}
